home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 1 / PC World Interactive 1 - Nisan 1997.iso / nostalji / bbs / modem / sssw33ie.exe / SETUPAPI.IN_ / SETUPAPI.IN
Text File  |  1996-09-05  |  56KB  |  1,807 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34. DECLARE FUNCTION ExitWindowsExec LIB "user" (szProgram$, szCmdLine$ ) AS INTEGER
  35. DECLARE FUNCTION ExitWindows LIB "user" (RetCode&, Res%) AS INTEGER
  36.  
  37.  
  38.  
  39. '**************************************************************************
  40. '****************************** Setup Constants ***************************
  41. '**************************************************************************
  42.  
  43. CONST EW_RESTARTWINDOWS = 66
  44.  
  45.  
  46. ''Command Option Flags
  47.  
  48. CONST cmoVital       = 1
  49. CONST cmoCopy        = 2
  50. CONST cmoUndo        = 4
  51. CONST cmoRoot        = 8
  52. CONST cmoDecompress  = 16
  53. CONST cmoTimeStamp   = 32
  54. CONST cmoReadOnly    = 64
  55. CONST cmoBackup      = 128
  56. CONST cmoForce       = 256
  57. CONST cmoRemove      = 512
  58. CONST cmoOverwrite   = 1024
  59. CONST cmoAppend      = 2048
  60. CONST cmoPrepend     = 4096
  61. CONST cmoNone        = 0
  62. CONST cmoAll         = 65535
  63.  
  64.  
  65. ''File Exist Modes
  66.  
  67. CONST femExists     = 0
  68. CONST femRead       = 1
  69. CONST femWrite      = 2
  70. CONST femReadWrite  = 3
  71.  
  72.  
  73. ''Read-Only Return Code
  74.  
  75. CONST ynrcNo         = 0
  76. CONST ynrcYes        = 1
  77. CONST ynrcErr1       = 2
  78. CONST ynrcErr2       = 3
  79. CONST ynrcErr3       = 4
  80. CONST ynrcErr4       = 5
  81. CONST ynrcErr5       = 6
  82. CONST ynrcErr6       = 7
  83. CONST ynrcErr7       = 8
  84. CONST ynrcErr8       = 9
  85. CONST ynrcErr9       = 10
  86.  
  87.  
  88. ''General Return Codes
  89.  
  90. CONST grcOkay       = 0
  91. CONST grcNotOkay    = 1
  92. CONST grcUserQuit   = 48
  93.  
  94.  
  95. ''Ranges
  96.  
  97. ''CONST cbSymValMax = 8192
  98. CONST cbSymValMax = 512
  99.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  100.     '' but we get Out of String Space wattdrvr error if we alloc
  101.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  102.     '' We should look into using dynamic far alloc instead of
  103.     '' STRING$ for large buffers.
  104.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  105.  
  106.  
  107. ''ON ERROR Error Codes
  108. CONST STFERR      = 1024   ''setup system error
  109. CONST STFQUIT     = 1025   ''user quit
  110.  
  111. CONST scmOff      = 0
  112. CONST scmOnIgnore = 1
  113. CONST scmOnFatal  = 2
  114.  
  115.  
  116. '**************************************************************************
  117. '********************************  Setup API's  ***************************
  118. '**************************************************************************
  119.  
  120. '' common
  121.  
  122. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  123. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  124. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  125. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  126. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  127. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  128. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  129. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  130. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  131. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  132. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  133.  
  134.  
  135. ''shell
  136.  
  137. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  138. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  139. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  140. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  141. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  142. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  143. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  144. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  145. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  146. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  147. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  148. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  149. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  150.  
  151.  
  152. ''shell
  153.  
  154. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  155. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  156. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  157.  
  158.  
  159.  
  160. ''install
  161.  
  162. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  163. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  164. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  165. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  166. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  167. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  168. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  169. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  174. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  175. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  176. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  177. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  178. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  179. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  180. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  181. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  182. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  183. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  184. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  185. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  186. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  187. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  188. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  189. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  190. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  191. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  192. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  193. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  194. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  195. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  196. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  197. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  198. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  199.  
  200. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  201.  
  202.  
  203.  
  204. '*************************************************************************
  205. '****************  Setup Basic Wrapper Declarations  *********************
  206. '*************************************************************************
  207.  
  208.  
  209. ''shell
  210.  
  211. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  212. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  213. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  214. DECLARE SUB UIPop (n%)
  215. DECLARE SUB UIPopAll
  216. DECLARE SUB SetTitle (sz$)
  217. DECLARE SUB ReadInfFile (szFile$)
  218. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  219. DECLARE SUB RemoveSymbol (szSym$)
  220. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  221. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  222. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  223. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  224. DECLARE SUB AddListItem(szSymbol$, szItem$)
  225. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  226.  
  227. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  228. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  229.  
  230. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  231. DECLARE SUB RestoreCursor (hPrev%)
  232.  
  233. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  234. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  235.  
  236. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  237. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  238. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  239. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  240.  
  241. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  242. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  243. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  244. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  245.  
  246.  
  247. ''install
  248.  
  249.  
  250. DECLARE SUB CreateDir (szDir$, cmo%)
  251. DECLARE SUB RemoveDir (szDir$, cmo%)
  252. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  253. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  254. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  255. DECLARE SUB CopyFilesInCopyList
  256. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  257. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  258. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  259. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  260. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  261. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  262. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  263. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  264. DECLARE SUB DumpCopyList (szFile$)
  265. DECLARE SUB ClearCopyList
  266. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  267. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  268. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  269. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  270. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  271. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  272. DECLARE SUB InitInstall
  273. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  274. DECLARE SUB AddBlankToBillboardList (lTicks&)
  275. DECLARE SUB ClearBillboardList
  276. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  277. DECLARE SUB CloseLogFile
  278. DECLARE SUB WriteToLogFile (szStr$)
  279. DECLARE SUB SetCopyGaugePosition (x%, y%)
  280. DECLARE SUB SetRestartDir(szDir$)
  281. DECLARE FUNCTION RestartListEmpty AS INTEGER
  282. DECLARE FUNCTION ExitExecRestart AS INTEGER
  283. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  284. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  285. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  286. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  287. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  288.  
  289.  
  290. '' Error Handling
  291.  
  292. '$ifdef DEBUG
  293.  
  294. '' Setup API Errors
  295. CONST saeFail   = 0
  296. CONST saeInit   = 1
  297. CONST saeNYI    = 3
  298. CONST saeArg    = 4    ''must be max sae value
  299.  
  300. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  301. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  302.  
  303. '' chk arg
  304. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  305. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  306. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  307. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  308.  
  309. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  310. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  311.  
  312. '$endif ''DEBUG
  313.  
  314.  
  315.  
  316. '' Windows system detect
  317.  
  318. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  319. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  320. DECLARE FUNCTION GetWindowsMode AS INTEGER
  321. DECLARE FUNCTION GetWindowsDir  AS STRING
  322. DECLARE FUNCTION GetWindowsSysDir AS STRING
  323. DECLARE FUNCTION IsWindowsShared AS INTEGER
  324. DECLARE FUNCTION GetScreenWidth AS INTEGER
  325. DECLARE FUNCTION GetScreenHeight AS INTEGER
  326.  
  327.  
  328. '*************************************************************************
  329. '*****************  Setup Basic Wrapper Definitions  *********************
  330. '*************************************************************************
  331. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  332.     fFrameInit = 0
  333.     fInstallInit = 0
  334.  
  335.     IF hSetup > 0 THEN
  336. '$ifdef DEBUG
  337.         StfApiErr saeInit, "InitSetup", szCmdLine$
  338. '$endif ''DEBUG
  339.     END IF
  340.  
  341.     i% = InitFrame(szCmdLine$)
  342.     fFrameInit = 1
  343.  
  344.     InitInstall
  345.     fInstallInit = 1
  346.  
  347.     InitSetup = i%
  348. END FUNCTION
  349.  
  350.  
  351.  
  352. '**************************************************************************
  353. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  354.     IF hSetup > 0 THEN
  355. '$ifdef DEBUG
  356.         StfApiErr saeInit, "InitFrame", szCmdLine$
  357. '$endif ''DEBUG
  358.     ELSE
  359.         i% = InitializeFrame(szCmdLine$)
  360.         IF i% = -1 THEN
  361.             END   '' NOT an error - Usage (/?) or Command line copy operation
  362.         ELSEIF i% = 0 THEN
  363. '$ifdef DEBUG
  364.             StfApiErr saeFail, "InitFrame", szCmdLine$
  365. '$endif ''DEBUG
  366.             END
  367.         ELSE
  368.             InitFrame = i%
  369.         END IF
  370.     END IF
  371. END FUNCTION
  372.  
  373.  
  374. '**************************************************************************
  375. SUB SetBitmap(szDll$, Bitmap%) STATIC
  376.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  377. '$ifdef DEBUG
  378.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  379. '$endif ''DEBUG
  380.         ERROR STFERR
  381.     END IF
  382. END SUB
  383.  
  384.  
  385. '**************************************************************************
  386. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  387.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  388. '$ifdef DEBUG
  389.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  390. '$endif ''DEBUG
  391.         ERROR STFERR
  392.     END IF
  393. END SUB
  394.  
  395.  
  396. '*************************************************************************
  397. SUB SetTitle(sz$) STATIC
  398.     SetWindowText HwndFrame(), sz$
  399. END SUB
  400.  
  401.  
  402. '*************************************************************************
  403. SUB ReadInfFile (szFile$) STATIC
  404. '$ifdef DEBUG
  405.     if FValidFATPath(szFile$) = 0 then
  406.         BadArgErr 1, "ReadInfFile", szFile$
  407.     end if
  408.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  409.         StfApiErr saeFail, "ReadInfFile", szFile$
  410. '$else  ''!DEBUG
  411.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  412. '$endif ''!DEBUG
  413.         ERROR STFERR
  414.     END IF
  415. END SUB
  416.  
  417.  
  418. '*************************************************************************
  419. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  420. '$ifdef DEBUG
  421.     if szDll$ = "" then
  422.         n% = 1
  423.     elseif szDlgProc$ = "" then
  424.         n% = 3
  425.     else
  426.         n% = 0
  427.     end if
  428.     if n% > 0 then
  429.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  430.     end if
  431. '$endif ''DEBUG
  432.  
  433.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  434. '$ifdef DEBUG
  435.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  436. '$endif ''DEBUG
  437.         ERROR STFERR
  438.     ELSE
  439.         UIStartDlg = GetSymbolValue("DLGEVENT")
  440.     END IF
  441. END FUNCTION
  442.  
  443.  
  444. '*************************************************************************
  445. SUB UIPop (n%) STATIC
  446.     IF FKillNDialogs(n%) = 0 THEN
  447. '$ifdef DEBUG
  448.         StfApiErr saeFail, "UIPop", STR$(n%)
  449. '$endif ''DEBUG
  450.         ERROR STFERR
  451.     END IF
  452. END SUB
  453.  
  454.  
  455. '*************************************************************************
  456. SUB UIPopAll STATIC
  457.     IF FKillNDialogs(65535) = 0 THEN
  458. '$ifdef DEBUG
  459.         StfApiErr saeFail, "UIPopAll", ""
  460. '$endif ''DEBUG
  461.         ERROR STFERR
  462.     END IF
  463. END SUB
  464.  
  465.  
  466. '*************************************************************************
  467. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  468. '$ifdef DEBUG
  469.     if szSymbol$ = "" then
  470.         BadArgErr 1, "GetSymbolValue", szSymbol$
  471.     end if
  472. '$endif ''DEBUG
  473.     szValue$ = string$(cbSymValMax,32)
  474.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  475.     GetSymbolValue = szValue$
  476.     IF Length% >= cbSymValMax THEN
  477.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  478.         ERROR STFERR
  479.     END IF
  480.     IF szSymbol$ = "" THEN
  481.         ERROR STFERR
  482.     END IF
  483.     szValue$ = ""
  484. END FUNCTION
  485.  
  486.  
  487. '*************************************************************************
  488. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  489. '$ifdef DEBUG
  490.     if szSymbol$ = "" then
  491.         BadArgErr 1, "GetListLength", szSymbol$
  492.     end if
  493. '$endif ''DEBUG
  494.     GetListLength = UsGetListLength(szSymbol$)
  495.     IF szSymbol$ = "" THEN
  496.         ERROR STFERR
  497.     END IF
  498. END FUNCTION
  499.  
  500.  
  501. '*************************************************************************
  502. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  503. '$ifdef DEBUG
  504.     if szListSymbol$ = "" then
  505.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  506.     end if
  507.  
  508.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  509.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  510.     end if
  511. '$endif ''DEBUG
  512.  
  513.     szListItem$ = string$(cbSymValMax,32)
  514.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  515.     GetListItem = szListItem$
  516.     IF Length% >= cbSymValMax THEN
  517.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  518.         ERROR STFERR
  519.     END IF
  520.     IF szListSymbol$ = "" THEN
  521.         ERROR STFERR
  522.     END IF
  523.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  524.         ERROR STFERR
  525.     end if
  526.     szListItem$ = ""
  527. END FUNCTION
  528.  
  529.  
  530. '*************************************************************************
  531. SUB AddListItem(szSymbol$, szItem$) STATIC
  532. '$ifdef DEBUG
  533.     if szSymbol$ = "" then
  534.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  535.     end if
  536. '$endif ''DEBUG
  537.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  538. '$ifdef DEBUG
  539.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  540. '$endif ''DEBUG
  541.         ERROR STFERR
  542.     END IF
  543. END SUB
  544.  
  545.  
  546. '*************************************************************************
  547. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  548. '$ifdef DEBUG
  549.     if szSymbol$ = "" then
  550.         nArg% = 1
  551.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  552.         nArg% = 2
  553.     else
  554.         nArg% = 0
  555.     end if
  556.     if nArg% > 0 then
  557.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  558.     end if
  559. '$endif ''DEBUG
  560.  
  561.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  562. '$ifdef DEBUG
  563.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  564. '$endif ''DEBUG
  565.         ERROR STFERR
  566.     END IF
  567. END SUB
  568.  
  569.  
  570. '**************************************************************************
  571. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  572. '$ifdef DEBUG
  573.     if szSymbol$ = "" then
  574.         n% = 1
  575.     elseif FValidInfSect(szSect$) = 0 then
  576.         n% = 2
  577.     else
  578.         n% = 0
  579.     end if
  580.     if n% > 0 then
  581.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  582.     end if
  583. '$endif ''DEBUG
  584.  
  585.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  586. '$ifdef DEBUG
  587.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  588. '$endif ''DEBUG
  589.         ERROR STFERR
  590.     END IF
  591. END SUB
  592.  
  593.  
  594. '*************************************************************************
  595. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  596. '$ifdef DEBUG
  597.     if szSymbol$ = "" then
  598.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  599.     end if
  600. '$endif ''DEBUG
  601.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  602. '$ifdef DEBUG
  603.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  604. '$endif ''DEBUG
  605.         ERROR STFERR
  606.     END IF
  607. END SUB
  608.  
  609.  
  610. '*************************************************************************
  611. SUB RemoveSymbol(szSym$) STATIC
  612. '$ifdef DEBUG
  613.     if szSym$ = "" then
  614.         BadArgErr 1, "RemoveSymbol", szSym$
  615.     end if
  616. '$endif ''DEBUG
  617.     IF FRemoveSymbol(szSym$) = 0 THEN
  618. '$ifdef DEBUG
  619.         StfApiErr saeFail, "RemoveSymbol", szSym$
  620. '$endif ''DEBUG
  621.         ERROR STFERR
  622.     END IF
  623. END SUB
  624.  
  625.  
  626. '*************************************************************************
  627. FUNCTION ShowWaitCursor STATIC AS INTEGER
  628.     ShowWaitCursor = HShowWaitCursor
  629. END FUNCTION
  630.  
  631.  
  632. '*************************************************************************
  633. SUB RestoreCursor (hPrev%) STATIC
  634.     i% = FRestoreCursor(hPrev%)
  635.     IF i% = 0 THEN
  636. '$ifdef DEBUG
  637.         StfApiErr saeFail, "RestoreCursor", ""
  638. '$endif ''DEBUG
  639.         ERROR STFERR
  640.     END IF
  641. END SUB
  642.  
  643.  
  644. '*************************************************************************
  645. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  646.     SetBeepingMode = FSetBeepingMode(mode%)
  647. END FUNCTION
  648.  
  649.  
  650. '*************************************************************************
  651. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  652.     SetSilentMode = FSetSilent(mode%)
  653. END FUNCTION
  654.  
  655.  
  656. '*************************************************************************
  657. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  658. '$ifdef DEBUG
  659.     if FValidInfSect(szSect$) = 0 then
  660.         n% = 1
  661.     elseif szKey$ = "" then
  662.         n% = 2
  663.     else
  664.         n% = 0
  665.     end if
  666.     if n% > 0 then
  667.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  668.     end if
  669. '$endif ''DEBUG
  670.  
  671.     szBuf$ = string$(128, 32)
  672.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  673.     IF Length% >= 128 THEN
  674.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  675.         ERROR STFERR
  676.     END IF
  677.  
  678.     IF Length% = -1 THEN
  679. '$ifdef DEBUG
  680.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  681. '$endif ''DEBUG
  682.         ERROR STFERR
  683.     END IF
  684.  
  685.     GetSectionKeyDate = szBuf$
  686.     szBuf$ = ""
  687. END FUNCTION
  688.  
  689.  
  690. '*************************************************************************
  691. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  692. '$ifdef DEBUG
  693.     if FValidInfSect(szSect$) = 0 then
  694.         n% = 1
  695.     elseif szKey$ = "" then
  696.         n% = 2
  697.     else
  698.         n% = 0
  699.     end if
  700.     if n% > 0 then
  701.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  702.     end if
  703. '$endif ''DEBUG
  704.  
  705.     szBuf$ = string$(128, 32)
  706.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  707.     IF Length% >= 128 THEN
  708.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  709.         ERROR STFERR
  710.     END IF
  711.  
  712.     IF Length% = -1 THEN
  713. '$ifdef DEBUG
  714.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  715. '$endif ''DEBUG
  716.         ERROR STFERR
  717.     END IF
  718.  
  719.     GetSectionKeyFilename = szBuf$
  720.     szBuf$ = ""
  721. END FUNCTION
  722.  
  723.  
  724. '*************************************************************************
  725. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  726. '$ifdef DEBUG
  727.     if FValidInfSect(szSect$) = 0 then
  728.         n% = 1
  729.     elseif szKey$ = "" then
  730.         n% = 2
  731.     else
  732.         n% = 0
  733.     end if
  734.     if n% > 0 then
  735.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  736.     end if
  737. '$endif ''DEBUG
  738.  
  739.     szBuf$ = string$(128, 32)
  740.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  741.     IF Length% >= 128 THEN
  742.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  743.         ERROR STFERR
  744.     END IF
  745.  
  746.     IF Length% = -1 THEN
  747. '$ifdef DEBUG
  748.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  749. '$endif ''DEBUG
  750.         ERROR STFERR
  751.     END IF
  752.  
  753.     GetSectionKeySize = VAL(szBuf$)
  754.     szBuf$ = ""
  755. END FUNCTION
  756.  
  757.  
  758. '*************************************************************************
  759. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  760. '$ifdef DEBUG
  761.     if FValidInfSect(szSect$) = 0 then
  762.         n% = 1
  763.     elseif szKey$ = "" then
  764.         n% = 2
  765.     else
  766.         n% = 0
  767.     end if
  768.     if n% > 0 then
  769.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  770.     end if
  771. '$endif ''DEBUG
  772.  
  773.     szBuf$ = string$(128, 32)
  774.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  775.     IF Length% >= 128 THEN
  776.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  777.         ERROR STFERR
  778.     END IF
  779.  
  780.     IF Length% = -1 THEN
  781. '$ifdef DEBUG
  782.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  783. '$endif ''DEBUG
  784.         ERROR STFERR
  785.     END IF
  786.  
  787.     GetSectionKeyVersion = szBuf$
  788.     szBuf$ = ""
  789. END FUNCTION
  790.  
  791.  
  792. '*************************************************************************
  793. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  794. '$ifdef DEBUG
  795.     if szSym$ = "" then
  796.         n% = 1
  797.     elseif FValidInfSect(szSect$) = 0 then
  798.         n% = 2
  799.     else
  800.         n% = 0
  801.     end if
  802.     if n% > 0 then
  803.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  804.     end if
  805. '$endif ''DEBUG
  806.  
  807.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  808. '$ifdef DEBUG
  809.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  810. '$endif ''DEBUG
  811.         ERROR STFERR
  812.     END IF
  813. END SUB
  814.  
  815.  
  816. '*************************************************************************
  817. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  818. '$ifdef DEBUG
  819.     if szSym$ = "" then
  820.         n% = 1
  821.     elseif FValidInfSect(szSect$) = 0 then
  822.         n% = 2
  823.     else
  824.         n% = 0
  825.     end if
  826.     if n% > 0 then
  827.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  828.     end if
  829. '$endif ''DEBUG
  830.  
  831.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  832. '$ifdef DEBUG
  833.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  834. '$endif ''DEBUG
  835.         ERROR STFERR
  836.     END IF
  837. END SUB
  838.  
  839.  
  840. '*************************************************************************
  841. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  842. '$ifdef DEBUG
  843.     if szSym$ = "" then
  844.         n% = 1
  845.     elseif FValidInfSect(szSect$) = 0 then
  846.         n% = 2
  847.     else
  848.         n% = 0
  849.     end if
  850.     if n% > 0 then
  851.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  852.     end if
  853. '$endif ''DEBUG
  854.  
  855.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  856. '$ifdef DEBUG
  857.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  858. '$endif ''DEBUG
  859.         ERROR STFERR
  860.     END IF
  861. END SUB
  862.  
  863.  
  864. '*************************************************************************
  865. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  866. '$ifdef DEBUG
  867.     if szSym$ = "" then
  868.         n% = 1
  869.     elseif FValidInfSect(szSect$) = 0 then
  870.         n% = 2
  871.     else
  872.         n% = 0
  873.     end if
  874.     if n% > 0 then
  875.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  876.     end if
  877. '$endif ''DEBUG
  878.  
  879.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  880. '$ifdef DEBUG
  881.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  882. '$endif ''DEBUG
  883.         ERROR STFERR
  884.     END IF
  885. END SUB
  886.  
  887.  
  888. '*************************************************************************
  889. SUB InitInstall STATIC
  890.     IF hSetup > 0 THEN
  891. '$ifdef DEBUG
  892.         StfApiErr saeInit, "InitInstall", ""
  893. '$endif ''DEBUG
  894.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  895. '$ifdef DEBUG
  896.         StfApiErr saeFail, "InitInstall", ""
  897. '$endif ''DEBUG
  898.         END
  899.     END IF
  900. END SUB
  901.  
  902.  
  903. '*************************************************************************
  904. SUB CreateDir (szDir$, cmo%) STATIC
  905. '$ifdef DEBUG
  906.     if FValidFATDir(szDir$) = 0 then
  907.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  908.     end if
  909. '$endif ''DEBUG
  910.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  911. '$ifdef DEBUG
  912.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  913. '$endif ''DEBUG
  914.         ERROR STFERR
  915.     END IF
  916. END SUB
  917.  
  918.  
  919. '*************************************************************************
  920. SUB RemoveDir (szDir$, cmo%) STATIC
  921. '$ifdef DEBUG
  922.     if FValidFATDir(szDir$) = 0 then
  923.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  924.     end if
  925. '$endif ''DEBUG
  926.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  927. '$ifdef DEBUG
  928.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  929. '$endif ''DEBUG
  930.         ERROR STFERR
  931.     END IF
  932. END SUB
  933.  
  934.  
  935.  
  936. '*************************************************************************
  937. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  938. '$ifdef DEBUG
  939.     if FValidIniFile(szFile$) = 0 then
  940.         n% = 1
  941.     elseif FValidInfSect(szSect$) = 0 then
  942.         n% = 2
  943.     else
  944.         n% = 0
  945.     end if
  946.     if n% > 0 then
  947.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  948.     end if
  949. '$endif ''DEBUG
  950.  
  951.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  952. '$ifdef DEBUG
  953.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  954. '$endif ''DEBUG
  955.         ERROR STFERR
  956.     END IF
  957. END SUB
  958.  
  959.  
  960. '*************************************************************************
  961. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  962. '$ifdef DEBUG
  963.     if FValidIniFile(szFile$) = 0 then
  964.         n% = 1
  965.     elseif FValidInfSect(szSect$) = 0 then
  966.         n% = 2
  967.     else
  968.         n% = 0
  969.     end if
  970.     if n% > 0 then
  971.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  972.     end if
  973. '$endif ''DEBUG
  974.  
  975.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  976. '$ifdef DEBUG
  977.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  978. '$endif ''DEBUG
  979.         ERROR STFERR
  980.     END IF
  981. END SUB
  982.  
  983.  
  984. '*************************************************************************
  985. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  986. '$ifdef DEBUG
  987.     if FValidIniFile(szFile$) = 0 then
  988.         n% = 1
  989.     elseif FValidInfSect(szSect$) = 0 then
  990.         n% = 2
  991.     elseif szKey$ = "" then
  992.         n% = 3
  993.     else
  994.         n% = 0
  995.     end if
  996.     if n% > 0 then
  997.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  998.     end if
  999. '$endif ''DEBUG
  1000.  
  1001.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1002. '$ifdef DEBUG
  1003.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1004. '$endif ''DEBUG
  1005.         ERROR STFERR
  1006.     END IF
  1007. END SUB
  1008.  
  1009.  
  1010. '*************************************************************************
  1011. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1012. '$ifdef DEBUG
  1013.     if FValidFATPath(szFile$) = 0 then
  1014.         n% = 1
  1015.     elseif FValidInfSect(szSect$) = 0 then
  1016.         n% = 2
  1017.     elseif szKey$ = "" then
  1018.         n% = 3
  1019.     else
  1020.         n% = 0
  1021.     end if
  1022.     if n% > 0 then
  1023.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1024.     end if
  1025. '$endif ''DEBUG
  1026.  
  1027.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1028. '$ifdef DEBUG
  1029.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1030. '$endif ''DEBUG
  1031.         ERROR STFERR
  1032.     END IF
  1033. END SUB
  1034.  
  1035.  
  1036. '*************************************************************************
  1037. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1038. '$ifdef DEBUG
  1039.     if szGroup$ = "" or len(szGroup$) > 24 then
  1040.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1041.     end if
  1042. '$endif ''DEBUG
  1043.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1044. '$ifdef DEBUG
  1045.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1046. '$endif ''DEBUG
  1047.         ERROR STFERR
  1048.     END IF
  1049. END SUB
  1050.  
  1051.  
  1052. '*************************************************************************
  1053. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1054. '$ifdef DEBUG
  1055.     if szGroup$ = "" or len(szGroup$) > 24 then
  1056.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1057.     end if
  1058. '$endif ''DEBUG
  1059.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1060. '$ifdef DEBUG
  1061.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1062. '$endif ''DEBUG
  1063.         ERROR STFERR
  1064.     END IF
  1065. END SUB
  1066.  
  1067.  
  1068. '*************************************************************************
  1069. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1070. '$ifdef DEBUG
  1071.     if FValidInfSect(szSect$) = 0 then
  1072.         n% = 1
  1073.     elseif szKey$ = "" then
  1074.         n% = 2
  1075.     elseif FValidFATDir(szDst$) = 0 then
  1076.         n% = 3
  1077.     else
  1078.         n% = 0
  1079.     end if
  1080.     if n% > 0 then
  1081.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1082.     end if
  1083. '$endif ''DEBUG
  1084.  
  1085.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1086. '$ifdef DEBUG
  1087.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1088. '$endif ''DEBUG
  1089.         ERROR STFERR
  1090.     END IF
  1091. END SUB
  1092.  
  1093.  
  1094. '*************************************************************************
  1095. SUB DumpCopyList (szFile$) STATIC
  1096. '$ifdef DEBUG
  1097.     if szFile$ = "" then
  1098.         BadArgErr 1, "DumpCopyList", szFile$
  1099.     end if
  1100. '$endif ''DEBUG
  1101.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1102. '$ifdef DEBUG
  1103.         StfApiErr saeFail, "DumpCopyList", szFile$
  1104. '$endif ''DEBUG
  1105.         ERROR STFERR
  1106.     END IF
  1107. END SUB
  1108.  
  1109.  
  1110. '*************************************************************************
  1111. SUB ClearCopyList STATIC
  1112.     ResetCopyList
  1113. END SUB
  1114.  
  1115.  
  1116. '*************************************************************************
  1117. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1118.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1119.     IF lNeed& < 0 THEN
  1120. '$ifdef DEBUG
  1121.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1122. '$endif ''DEBUG
  1123.         ERROR STFERR
  1124.     END IF
  1125.     GetCopyListCost = lNeed&
  1126. END FUNCTION
  1127.  
  1128.  
  1129. '*************************************************************************
  1130. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1131.     szItemNew$ = szItem$
  1132.     IF szOther$ <> "" THEN
  1133.         szItemNew$ = szItem$ + "," + szOther$
  1134.     END IF
  1135. '$ifdef DEBUG
  1136.     if szGroup$ = "" or len(szGroup$) > 24 then
  1137.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1138.     end if
  1139. '$endif ''DEBUG
  1140.  
  1141.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1142. '$ifdef DEBUG
  1143.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1144. '$endif ''DEBUG
  1145.         ERROR STFERR
  1146.     END IF
  1147.     szItemNew$ = ""
  1148. END SUB
  1149.  
  1150.  
  1151. '*************************************************************************
  1152. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1153. '$ifdef DEBUG
  1154.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1155.         n% = 1
  1156.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1157.         n% = 1
  1158.     elseif szProgHelp$ = "" then
  1159.         n% = 2
  1160.     else
  1161.         n% = 0
  1162.     end if
  1163.     if n% > 0 then
  1164.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1165.     end if
  1166. '$endif ''DEBUG
  1167.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1168. '$ifdef DEBUG
  1169.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1170. '$endif ''DEBUG
  1171.         ERROR STFERR
  1172.     END IF
  1173. END SUB
  1174.  
  1175.  
  1176. '*************************************************************************
  1177. SUB CopyFilesInCopyList STATIC
  1178.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1179.  
  1180.     IF grc% = grcUserQuit THEN
  1181.         ERROR STFQUIT
  1182.     ELSEIF grc% > 0 THEN
  1183. '$ifdef DEBUG
  1184.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1185. '$endif ''DEBUG
  1186.         ERROR STFERR
  1187.     END IF
  1188. END SUB
  1189.  
  1190.  
  1191. '*************************************************************************
  1192. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1193. '$ifdef DEBUG
  1194.     if FValidFATPath(szFullPathSrc$) = 0 then
  1195.         n% = 1
  1196.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1197.         n% = 2
  1198.     else
  1199.         n% = 0
  1200.     end if
  1201.     if n% > 0 then
  1202.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1203.     end if
  1204. '$endif ''DEBUG
  1205.  
  1206.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1207. '$ifdef DEBUG
  1208.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1209. '$endif ''DEBUG
  1210.         ERROR STFERR
  1211.     END IF
  1212. END SUB
  1213.  
  1214.  
  1215.  
  1216. '*************************************************************************
  1217. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1218. '$ifdef DEBUG
  1219.     if FValidFATPath(szFullPathSrc$) = 0 then
  1220.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1221.     end if
  1222. '$endif ''DEBUG
  1223.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1224. '$ifdef DEBUG
  1225.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1226. '$endif ''DEBUG
  1227.         ERROR STFERR
  1228.     END IF
  1229. END SUB
  1230.  
  1231.  
  1232. '*************************************************************************
  1233. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1234. '$ifdef DEBUG
  1235.     if FValidFATPath(szFullPath$) = 0 then
  1236.         n% = 1
  1237.     elseif szBackup$ = "" then
  1238.         n% = 2
  1239.     else
  1240.         n% = 0
  1241.     end if
  1242.     if n% > 0 then
  1243.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1244.     end if
  1245. '$endif ''DEBUG
  1246.  
  1247.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1248. '$ifdef DEBUG
  1249.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1250. '$endif ''DEBUG
  1251.         ERROR STFERR
  1252.     END IF
  1253. END SUB
  1254.  
  1255.  
  1256. '*************************************************************************
  1257. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1258. '$ifdef DEBUG
  1259.     if FValidFATPath(szFullPath$) = 0 then
  1260.         n% = 1
  1261.     elseif szBackup$ = "" then
  1262.         n% = 2
  1263.     else
  1264.         n% = 0
  1265.     end if
  1266.     if n% > 0 then
  1267.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1268.     end if
  1269. '$endif ''DEBUG
  1270.  
  1271.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1272. '$ifdef DEBUG
  1273.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1274. '$endif ''DEBUG
  1275.         ERROR STFERR
  1276.     END IF
  1277. END SUB
  1278.  
  1279.  
  1280. '*************************************************************************
  1281. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1282. '$ifdef DEBUG
  1283.     if FValidInfSect(szSect$) = 0 then
  1284.         n% = 1
  1285.     elseif FValidFATDir(szSrc$) = 0 then
  1286.         n% = 2
  1287.     elseif FValidFATDir(szDest$) = 0 then
  1288.         n% = 3
  1289.     else
  1290.         n% = 0
  1291.     end if
  1292.     if n% > 0 then
  1293.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1294.     end if
  1295. '$endif ''DEBUG
  1296.  
  1297.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1298. '$ifdef DEBUG
  1299.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1300. '$endif ''DEBUG
  1301.         ERROR STFERR
  1302.     END IF
  1303. END SUB
  1304.  
  1305.  
  1306. '*************************************************************************
  1307. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1308. '$ifdef DEBUG
  1309.     if FValidInfSect(szSect$) = 0 then
  1310.         n% = 1
  1311.     elseif szKey$ = "" then
  1312.         n% = 2
  1313.     elseif FValidFATDir(szSrc$) = 0 then
  1314.         n% = 3
  1315.     elseif FValidFATDir(szDest$) = 0 then
  1316.         n% = 4
  1317.     else
  1318.         n% = 0
  1319.     end if
  1320.     if n% > 0 then
  1321.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1322.     end if
  1323. '$endif ''DEBUG
  1324.  
  1325.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1326. '$ifdef DEBUG
  1327.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1328. '$endif ''DEBUG
  1329.         ERROR STFERR
  1330.     END IF
  1331. END SUB
  1332.  
  1333.  
  1334. '*************************************************************************
  1335. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1336. '$ifdef DEBUG
  1337.     if FValidInfSect(szSect$) = 0 then
  1338.         n% = 1
  1339.     elseif szKey$ = "" then
  1340.         n% = 2
  1341.     elseif FValidFATDir(szSrc$) = 0 then
  1342.         n% = 3
  1343.     elseif FValidFATPath(szDest$) = 0 then
  1344.         n% = 4
  1345.     else
  1346.         n% = 0
  1347.     end if
  1348.     if n% > 0 then
  1349.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1350.     end if
  1351. '$endif ''DEBUG
  1352.  
  1353.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1354. '$ifdef DEBUG
  1355.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1356. '$endif ''DEBUG
  1357.         ERROR STFERR
  1358.     END IF
  1359. END SUB
  1360.  
  1361.  
  1362. '*************************************************************************
  1363. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1364. '$ifdef DEBUG
  1365.     if szDll$ = "" then
  1366.         n% = 1
  1367.     elseif idDlg% = 0 then
  1368.         n% = 2
  1369.     elseif szProc$ = "" then
  1370.         n% = 3
  1371.     elseif lTicks& <= 0 then
  1372.         n% = 4
  1373.     else
  1374.         n% = 0
  1375.     end if
  1376.     if n% > 0 then
  1377.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1378.     end if
  1379. '$endif ''DEBUG
  1380.  
  1381.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1382. '$ifdef DEBUG
  1383.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1384. '$endif ''DEBUG
  1385.         ERROR STFERR
  1386.     END IF
  1387. END SUB
  1388.  
  1389.  
  1390. '*************************************************************************
  1391. SUB AddBlankToBillboardList (lTicks&) STATIC
  1392. '$ifdef DEBUG
  1393.     if lTicks& <= 0 then
  1394.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1395.     end if
  1396. '$endif ''DEBUG
  1397.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1398. '$ifdef DEBUG
  1399.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1400. '$endif ''DEBUG
  1401.         ERROR STFERR
  1402.     END IF
  1403. END SUB
  1404.  
  1405.  
  1406. '*************************************************************************
  1407. SUB ClearBillboardList STATIC
  1408.     IF FClearBillboardList = 0 THEN
  1409. '$ifdef DEBUG
  1410.         StfApiErr saeFail, "ClearBillboardList", ""
  1411. '$endif ''DEBUG
  1412.         ERROR STFERR
  1413.     END IF
  1414. END SUB
  1415.  
  1416.  
  1417. '*************************************************************************
  1418. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1419. '$ifdef DEBUG
  1420.     if FValidFATPath(szFile$) = 0 then
  1421.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1422.     end if
  1423. '$endif ''DEBUG
  1424.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1425. '$ifdef DEBUG
  1426.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1427. '$endif ''DEBUG
  1428.         ERROR STFERR
  1429.     END IF
  1430. END SUB
  1431.  
  1432.  
  1433. '*************************************************************************
  1434. SUB CloseLogFile STATIC
  1435.     IF FCloseLogFile() = 0 THEN
  1436. '$ifdef DEBUG
  1437.         StfApiErr saeFail, "CloseLogFile", ""
  1438. '$endif ''DEBUG
  1439.         ERROR STFERR
  1440.     END IF
  1441. END SUB
  1442.  
  1443.  
  1444. '*************************************************************************
  1445. SUB WriteToLogFile (szStr$) STATIC
  1446.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1447. '$ifdef DEBUG
  1448.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1449. '$endif ''DEBUG
  1450.         ERROR STFERR
  1451.     END IF
  1452. END SUB
  1453.  
  1454.  
  1455. ''' -1 in either parameter will mean 'center in frame client area'
  1456. '*************************************************************************
  1457. SUB SetCopyGaugePosition (x%, y%) STATIC
  1458.     ProSetPos x%, y%
  1459. END SUB
  1460.  
  1461.  
  1462. '*************************************************************************
  1463. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1464.     szBuf$ = STRING$(512, 32)
  1465.  
  1466.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1467.     IF wRet% = 0 THEN
  1468.         FindFileUsingFileOpen = szBuf$
  1469.     ELSEIF wRet% = 1 THEN
  1470.         FindFileUsingFileOpen = ""
  1471.     ELSE
  1472. '$ifdef DEBUG
  1473.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1474. '$endif ''DEBUG
  1475.         ERROR STFERR
  1476.     END IF
  1477.  
  1478.     szBuf$ = ""
  1479. END FUNCTION
  1480.  
  1481.  
  1482. '*************************************************************************
  1483. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1484.     IsDirWritable = FIsDirWritable(szDir$)
  1485. END FUNCTION
  1486.  
  1487.  
  1488. '*************************************************************************
  1489. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1490. '$ifdef DEBUG
  1491.     if FValidFATDir(szFile$) = 0 then
  1492.         BadArgErr 1, "IsFileWritable", szFile$
  1493.     end if
  1494. '$endif ''DEBUG
  1495.     IsFileWritable = FIsFileWritable(szFile$)
  1496. END FUNCTION
  1497.  
  1498.  
  1499. '*************************************************************************
  1500. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1501.     IF iField% < 1 THEN
  1502. '$ifdef DEBUG
  1503.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1504. '$endif ''DEBUG
  1505.         ERROR STFERR
  1506.     END IF
  1507.     szStart$ = szLine$
  1508.     IF iField% <> 1 THEN
  1509.         FOR i% = 2 TO iField% STEP 1
  1510.             iNew% = INSTR(szStart$, ",")
  1511.             IF iNew% = 0 THEN
  1512.                 GetNthFieldFromIniString = ""
  1513.                 GOTO _GNFFIS_END
  1514.             END IF
  1515.             szStart$ = MID$(szStart$, (iNew% + 1))
  1516.         NEXT
  1517.     END IF
  1518.  
  1519.     iNew% = INSTR(szStart$, ",")
  1520.     IF iNew% <> 0 THEN
  1521.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1522.     END IF
  1523.  
  1524.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1525.  
  1526. _GNFFIS_END:
  1527.  
  1528. END FUNCTION
  1529.  
  1530.  
  1531. '*************************************************************************
  1532. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1533.     GetWindowsMajorVersion = GetVersion() MOD 256
  1534. END FUNCTION
  1535.  
  1536.  
  1537. '*************************************************************************
  1538. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1539.     GetWindowsMinorVersion = GetVersion() / 256
  1540. END FUNCTION
  1541.  
  1542.  
  1543. '*************************************************************************
  1544. FUNCTION GetWindowsMode STATIC AS INTEGER
  1545.     GetWindowsMode = 0
  1546.     longTmp& = GetWinFlags()
  1547.     IF longTmp& AND WF_STANDARD THEN
  1548.         GetWindowsMode = 1
  1549.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1550.         GetWindowsMode = 2
  1551.     END IF
  1552. END FUNCTION
  1553.  
  1554.  
  1555. '*************************************************************************
  1556. FUNCTION GetWindowsDir STATIC AS STRING
  1557.     szBuf$ = string$(256, 32)
  1558.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1559.  
  1560.     IF cbBuf% = 0 THEN
  1561.         GetWindowsDir = ""
  1562. '$ifdef DEBUG
  1563.         StfApiErr saeFail, "GetWindowsDir", ""
  1564. '$endif ''DEBUG
  1565.         ERROR STFERR
  1566.     ELSE
  1567.         IF cbBuf% > 255 THEN
  1568.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1569.             ERROR STFERR
  1570.         END IF
  1571.         szBuf$ = RTRIM$(szBuf$)
  1572.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1573.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1574.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1575.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1576.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1577.         END IF
  1578.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1579.             szBuf$ = szBuf$ + "\"
  1580.         END IF
  1581.         GetWindowsDir = szBuf$
  1582.     END IF
  1583.  
  1584.     szBuf$ = ""
  1585. END FUNCTION
  1586.  
  1587.  
  1588. '*************************************************************************
  1589. FUNCTION GetWindowsSysDir STATIC AS STRING
  1590.     szBuf$ = string$(256, 32)
  1591.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1592.  
  1593.     IF cbBuf% = 0 THEN
  1594. '$ifdef DEBUG
  1595.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1596. '$endif ''DEBUG
  1597.         ERROR STFERR
  1598.     ELSE
  1599.         IF cbBuf% > 255 THEN
  1600.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1601.             ERROR STFERR
  1602.         END IF
  1603.         szBuf$ = RTRIM$(szBuf$)
  1604.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1605.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1606.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1607.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1608.         END IF
  1609.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1610.             szBuf$ = szBuf$ + "\"
  1611.         END IF
  1612.         GetWindowsSysDir = szBuf$
  1613.     END IF
  1614.  
  1615.     szBuf$ = ""
  1616. END FUNCTION
  1617.  
  1618.  
  1619. '*************************************************************************
  1620. FUNCTION IsWindowsShared STATIC AS INTEGER
  1621.     szWin$ = UCASE$(GetWindowsDir())
  1622.     szSys$ = UCASE$(GetWindowsSysDir())
  1623.  
  1624.     IF len(szWin$) = 0 THEN
  1625. '$ifdef DEBUG
  1626.         StfApiErr saeFail, "IsWindowsShared", ""
  1627. '$endif ''DEBUG
  1628.         ERROR STFERR
  1629.     END IF
  1630.  
  1631.     IF len(szSys$) <= len(szWin$) THEN
  1632.         IsWindowsShared = 1
  1633.     ELSE
  1634.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1635.         IF szWin$ = szSys$ THEN
  1636.             IsWindowsShared = 0
  1637.         ELSE
  1638.             IsWindowsShared = 1
  1639.         END IF
  1640.     END IF
  1641. END FUNCTION
  1642.  
  1643.  
  1644. '*************************************************************************
  1645. FUNCTION GetScreenWidth STATIC AS INTEGER
  1646.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1647. END FUNCTION
  1648.  
  1649.  
  1650. '*************************************************************************
  1651. FUNCTION GetScreenHeight STATIC AS INTEGER
  1652.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1653. END FUNCTION
  1654.  
  1655.  
  1656. '*************************************************************************
  1657. SUB SetRestartDir (szDir$) STATIC
  1658. '$ifdef DEBUG
  1659.     if FValidFATDir(szDir$) = 0 then
  1660.         BadArgErr 1, "SetRestartDir", szDir$
  1661.     end if
  1662. '$endif ''DEBUG
  1663.     IF FSetRestartDir(szDir$) = 0 THEN
  1664. '$ifdef DEBUG
  1665.         StfApiErr saeFail, "SetRestartDir", szDir$
  1666. '$endif ''DEBUG
  1667.         ERROR STFERR
  1668.     END IF
  1669. END SUB
  1670.  
  1671.  
  1672. '*************************************************************************
  1673. FUNCTION RestartListEmpty STATIC AS INTEGER
  1674.     IF FRestartListEmpty() = 0 THEN
  1675.         RestartListEmpty = 0
  1676.     ELSE
  1677.         RestartListEmpty = 1
  1678.     END IF
  1679. END FUNCTION
  1680.  
  1681.  
  1682. '*************************************************************************
  1683. FUNCTION ExitExecRestart STATIC AS INTEGER
  1684.     ExitExecRestart = FExitExecRestart
  1685. END FUNCTION
  1686.  
  1687.  
  1688. '*************************************************************************
  1689. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1690.  
  1691. '$ifdef DEBUG
  1692.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1693.         n% = 1
  1694.     elseif FValidFATPath(szDst$) = 0 then
  1695.         n% = 2
  1696.     elseif FValidFATDir(szDir$) = 0 then
  1697.         n% = 3
  1698.     else
  1699.         n% = 0
  1700.     end if
  1701.     if n% > 0 then
  1702.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1703.     end if
  1704. '$endif ''DEBUG
  1705.  
  1706.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1707. '$ifdef DEBUG
  1708.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1709. '$endif ''DEBUG
  1710.         ERROR STFERR
  1711.     END IF
  1712. END SUB
  1713.  
  1714.  
  1715.  
  1716. '**************************************************************************
  1717. '***************************  Error Handlers  *****************************
  1718. '**************************************************************************
  1719.  
  1720.  
  1721. '$ifdef DEBUG
  1722. '**************************************************************************
  1723. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1724.     select case nMsg%
  1725.         case saeFail
  1726.             lpText$ = "Failed"
  1727.         case saeInit
  1728.             lpText$ = "Already Initialized"
  1729.         case saeNYI
  1730.             lpText$ = "NYI"
  1731.         case else
  1732.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1733.     end select
  1734.  
  1735.     lpText$ = lpText$ + ": "+ szApi$
  1736.     if szArgs$ <> "" then
  1737.         lpText$ = lpText + " (" + szArgs$ + ")"
  1738.     end if
  1739.     lpCaption$ = "MS-Setup Toolkit API Error"
  1740.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1741.     print lpText$
  1742.     lpText$ = ""
  1743.     lpCaption$ = ""
  1744. END SUB
  1745.  
  1746. '**************************************************************************
  1747. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1748.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1749.     ERROR STFERR
  1750. END SUB
  1751.  
  1752.  
  1753. '** REVIEW: Move this function into common lib (we'll need it there too)
  1754. '**************************************************************************
  1755. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1756.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1757.         FValidInfSect = 0
  1758.     else
  1759.         FValidInfSect = 1
  1760.     end if
  1761. END FUNCTION
  1762.  
  1763.  
  1764. '** REVIEW: Move this function into common lib (we'll need it there too)
  1765. '**************************************************************************
  1766. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1767.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1768.         FValidIniFile = 0
  1769.     else
  1770.         FValidIniFile = 1
  1771.     end if
  1772. END FUNCTION
  1773.  
  1774. '**************************************************************************
  1775. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1776.  
  1777.     if szDrive$ = "" then
  1778.         FValidDrive = 0
  1779.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1780.         FValidDrive = 1
  1781.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1782.         FValidDrive = 0
  1783.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1784.         FValidDrive = 0
  1785.     elseif LEN(szDrive$) = 1 then
  1786.         FValidDrive = 1
  1787.     elseif INSTR(2,szDrive$,":\") = 2 then
  1788.         FValidDrive = 1
  1789.     elseif INSTR(1,szDrive$,":") = 2 then
  1790.         FValidDrive = 1
  1791.     else
  1792.         FValidDrive = 0
  1793.     end if
  1794. END FUNCTION
  1795.  
  1796. '$endif ''DEBUG
  1797.  
  1798.  
  1799. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1800.  
  1801. End Trap
  1802.  
  1803. hSetup = InitSetup(COMMAND$)
  1804.  
  1805. ON ERROR GOTO QUIT
  1806.  
  1807.